记某hw中通过佛站技巧拿下标靶的全过程
目标站点大致如下:
主页只有一个登录框。没有其他功能(找回密码,注册用户)等。
对于这类系统,开局肯定是跑一波弱口令。
熟悉的开局。。。但是这里根据请求包发现了某处敏感信息。XXCMS.config??
既然是CMS,那么可以根据github等相关网站查找其敏感信息。
根据相关信息,找到了某博主所发的一个文章,证明此系统内部功能是存在SQL注入漏洞的。这也使我更有把握拿下这个系统。
但是文章并没有写明POC。那么只好自己动手了,确定了该系统由XX公司开发且处于闭源状态。且上图暗示大概率是存在弱口令的。
那么整理一下情况:
目标完全黑盒且无法从其他端口突破 无常规弱口令,卡在登录授权页面 网上的资料显示目标为某闭源CMS且大概率不限制密码复杂度或存在默认账户 网上公开的漏洞需要授权登录且未公开poc
目前的情况来看,当前标靶在没有可以登录的账户的前提下基本上是卡住了,但由于是某CMS,所以自然而然的要祭出FOFA工程师的绝活了。
作为一个FOFA工程师这个时候一般的工作流程如下:
我们希望通过这个流程从相似站点获取的东西有三个:
可能的授权凭证来通过登录页面 常规的getshell方法 该cms的源代码,用于白盒审计,通常是辅助实现上述两个目的
古有旁站手法,今现佛站技巧
下面是给出的两篇佛站技巧的参考文章:
https://xz.aliyun.com/t/8375 (本人所写) https://xz.aliyun.com/t/7786
根据ICO图标查询,找到了一个俄罗斯站点。
从文件结构来看,确实是使用的相同系统。那么开始测试。
由于主页只有登录,还是先尝试了爆破弱口令账户的方法。
最终,成功得到一个弱口令账户:user 123456
但是这里需要注意的是。根据返回包来看。目标系统并未采用Session的机制来校验账户信息。而是采用了获取Cookie中的某个值(可能是加密的)来确认当前账户。
如果挖掘出了需要登录的漏洞,那么迂回至目标系统时,可以尝试通过Cookie来伪造身份信息,这种伪造可以通过得知加密算法后自行构造,也可以通过复制cookie的形式来碰运气。
通常加密cookie值的话会加密类似于 `userid=1|roleid=1` 的字符串,因此如果运气好的话即使两个系统的账户名不一样但是其userid是一样的话,加密串也可能是可以复用的。
本以为得到了账户就可以直接开始测试了,但是登录过后的功能点几乎没有。。。
除了修改密码和退出登录。就没有其他可以测试的功能呢。。。这就非常头疼。
一顿摸索后,在Burp的history 页面中发现了一处敏感AJAX请求
该接口文件返回了部分路径地址,那么可以直接访问这些路径进一步测试。
最终在某处发现了一处文件上传功能。
初步测试,确定存在为任意文件上传。
但返回包里并没有附带文件的路径。但是当我再次尝试上传时,系统弹出了一个提示"File name already exists, please re-upload" = "文件名已存在,请重新上传"
那么可以很明确的确定。上传的文件并没有进行重命名的操作。尝试进行../跨目录
跨了4个目录,成功跳到根目录。
那么这就是一个CMS的通用漏洞。现在就可以直接使用该POC迂回到目标系统了。
但是目标系统得到的返回结果确是204
这里不知道是不是未登录的问题。想起刚刚测试的时候可以根据Cookie来伪造用户信息。将俄罗斯站点用户的Cookie复制了一份过来。再次上传
GG。还是204.那么可以说明这里存在用户效验了
既然没办法上传,又不想搞SQL(麻烦)。干脆直接在俄罗斯站点上打了一个shell。尝试将代码下载下来审计。
追踪到刚刚可以上传shell的位置。
这里就可以直接看出,后端是获取Cookie中的某键取值来进行判断的。
当UserID和RoleID都为空时,返回204(也就是目标靶标所返回的值)
第40,41行可以看出,UserID和RoleID时进行过加密的,这里进行了解密操作。
this.UserID = CommonFunction.DESDec(this.UserID);
this.RoleID = CommonFunction.DESDec(this.RoleID);
这里追踪过去,得到加解密的方法
由于后端会将UserID进行判断,是否存在该用户。那么只需要刚俄罗斯站点上的UserId的值解密出来,根据其结构在目标站点上Fuzz一下就可以了。
UserID=Uhe4q0dwPJk=
解密结果为2
之所以在目标标靶上显示204可能是没有2这个用户。应该是有id为1的账户的
那么只需要将 1 加密一下就可以了:
34dc0AHJKqA=
替换加密值尝试在目标站点上传。
成功拿下靶标
一次很常规的hw测试,并没有太多可圈可点之处,还请各位看官海涵。
这边建议大家平时多积累一些系统的源码,这样在遇到有源码的标靶时候,就不陷入纯黑盒测试的窘境,真的每次都是现佛现打其实还是挺难的。